home *** CD-ROM | disk | FTP | other *** search
/ Sprite 1984 - 1993 / Sprite 1984 - 1993.iso / src / cmds / mig / dist / lexxer.l < prev    next >
Encoding:
Text File  |  1992-01-28  |  9.7 KB  |  293 lines

  1. %k 10000
  2. %n 5000
  3. %a 20000
  4. %e 10000
  5. %p 25000
  6.  
  7. Ident        ([A-Za-z_][A-Za-z_0-9]*)
  8. Number        ([0-9]+)
  9. String        ([-/._$A-Za-z0-9]+)
  10. QString        (\"[^"\n]*\")
  11. AString        (\<[^>\n]*\>)
  12. FileName    ({QString}|{AString})
  13.  
  14. %{
  15. /* 
  16.  * Mach Operating System
  17.  * Copyright (c) 1991,1990 Carnegie Mellon University
  18.  * All Rights Reserved.
  19.  * 
  20.  * Permission to use, copy, modify and distribute this software and its
  21.  * documentation is hereby granted, provided that both the copyright
  22.  * notice and this permission notice appear in all copies of the
  23.  * software, derivative works or modified versions, and any portions
  24.  * thereof, and that both notices appear in supporting documentation.
  25.  * 
  26.  * CARNEGIE MELLON ALLOWS FREE USE OF THIS SOFTWARE IN ITS "AS IS"
  27.  * CONDITION.  CARNEGIE MELLON DISCLAIMS ANY LIABILITY OF ANY KIND FOR
  28.  * ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF THIS SOFTWARE.
  29.  * 
  30.  * Carnegie Mellon requests users of this software to return to
  31.  * 
  32.  *  Software Distribution Coordinator  or  Software.Distribution@CS.CMU.EDU
  33.  *  School of Computer Science
  34.  *  Carnegie Mellon University
  35.  *  Pittsburgh PA 15213-3890
  36.  * 
  37.  * any improvements or extensions that they make and grant Carnegie Mellon
  38.  * the rights to redistribute these changes.
  39.  */
  40. /*
  41.  * HISTORY
  42.  * $Log:    lexxer.l,v $
  43.  * Revision 2.7  92/01/23  15:21:24  rpd
  44.  *     Fixed macros for STDC.
  45.  *     [92/01/16            rpd]
  46.  * 
  47.  * Revision 2.6  92/01/03  20:29:25  dbg
  48.  *     Add 'CountInOut' flag.
  49.  *     [91/11/11            dbg]
  50.  * 
  51.  * Revision 2.5  91/08/28  11:17:01  jsb
  52.  *     Added syServerDemux.
  53.  *     [91/08/13            rpd]
  54.  * 
  55.  *     Removed syMsgKind, syCamelot, syCamelotRoutine, syTrapRoutine,
  56.  *     syTrapSimpleRoutine.  Added syMsgSeqno.
  57.  *     [91/08/11            rpd]
  58.  * 
  59.  * Revision 2.4  91/07/31  18:09:31  dbg
  60.  *     Add 'serverCopy' keyword.
  61.  *     [91/06/05            dbg]
  62.  * 
  63.  *     Add 'c_string' keyword.
  64.  *     [91/04/03            dbg]
  65.  * 
  66.  * Revision 2.3  91/02/05  17:54:51  mrt
  67.  *     Changed to new Mach copyright
  68.  *     [91/02/01  17:54:35  mrt]
  69.  * 
  70.  * Revision 2.2  90/06/02  15:04:54  rpd
  71.  *     Created for new IPC.
  72.  *     [90/03/26  21:11:34  rpd]
  73.  * 
  74.  * 07-Apr-89  Richard Draves (rpd) at Carnegie-Mellon University
  75.  *    Extensive revamping.  Added polymorphic arguments.
  76.  *    Allow multiple variable-sized inline arguments in messages.
  77.  *
  78.  * 27-May-87  Richard Draves (rpd) at Carnegie-Mellon University
  79.  *    Created.
  80.  */
  81.  
  82. #include <mach/message.h>
  83. #include "string.h"
  84. #include "type.h"
  85. #include "statement.h"
  86. #include "global.h"
  87. #include "parser.h"
  88. #include "lexxer.h"
  89.  
  90. #ifdef    __STDC__
  91. #define stringize(x)    #x
  92. #else    __STDC__
  93. #define    stringize(x)    "x"
  94. #endif    __STDC__
  95.  
  96. #ifdef    LDEBUG
  97. #define RETURN(sym)                            \
  98. {                                    \
  99.     printf("yylex: returning '%s' (%d)\n", stringize(sym), (sym));    \
  100.     return (sym);                            \
  101. }
  102. #else    LDEBUG
  103. #define RETURN(sym)    return (sym)
  104. #endif    LDEBUG
  105.  
  106. #define    TPRETURN(intype, outtype, tsize)                \
  107. {                                    \
  108.     yylval.symtype.innumber = (intype);                    \
  109.     yylval.symtype.instr = stringize(intype);                \
  110.     yylval.symtype.outnumber = (outtype);                \
  111.     yylval.symtype.outstr = stringize(outtype);                \
  112.     yylval.symtype.size = (tsize);                    \
  113.     RETURN(sySymbolicType);                        \
  114. }
  115.  
  116. #define    TRETURN(type, tsize)    TPRETURN(type,type,tsize)
  117.  
  118. #define    FRETURN(val)                            \
  119. {                                    \
  120.     yylval.flag = (val);                        \
  121.     RETURN(syIPCFlag);                            \
  122. }
  123.  
  124. static struct yysvf *oldYYBegin;
  125.  
  126. static void doSharp(); /* process body of # directives */
  127. %}
  128.  
  129. %Start    Normal String FileName QString SkipToEOL
  130.  
  131. %%
  132.  
  133. <Normal>[Rr][Oo][Uu][Tt][Ii][Nn][Ee]        RETURN(syRoutine);
  134. <Normal>[Ff][Uu][Nn][Cc][Tt][Ii][Oo][Nn]    RETURN(syFunction);
  135. <Normal>[Pp][Rr][Oo][Cc][Ee][Dd][Uu][Rr][Ee]    RETURN(syProcedure);
  136. <Normal>[Ss][Ii][Mm][Pp][Ll][Ee][Pp][Rr][Oo][Cc][Ee][Dd][Uu][Rr][Ee] RETURN(sySimpleProcedure);
  137. <Normal>[Ss][Ii][Mm][Pp][Ll][Ee][Rr][Oo][Uu][Tt][Ii][Nn][Ee] RETURN(sySimpleRoutine);
  138. <Normal>[Ss][Uu][Bb][Ss][Yy][Ss][Tt][Ee][Mm]    RETURN(sySubsystem);
  139. <Normal>[Mm][Ss][Gg][Oo][Pp][Tt][Ii][Oo][Nn]    RETURN(syMsgOption);
  140. <Normal>[Mm][Ss][Gg][Ss][Ee][Qq][Nn][Oo]    RETURN(syMsgSeqno);
  141. <Normal>[Ww][Aa][Ii][Tt][Tt][Ii][Mm][Ee]    RETURN(syWaitTime);
  142. <Normal>[Nn][Oo][Ww][Aa][Ii][Tt][Tt][Ii][Mm][Ee]    RETURN(syNoWaitTime);
  143. <Normal>[Ii][Nn]                RETURN(syIn);
  144. <Normal>[Oo][Uu][Tt]                RETURN(syOut);
  145. <Normal>[Ii][Nn][Oo][Uu][Tt]            RETURN(syInOut);
  146. <Normal>[Rr][Ee][Qq][Uu][Ee][Ss][Tt][Pp][Oo][Rr][Tt]    RETURN(syRequestPort);
  147. <Normal>[Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt]        RETURN(syReplyPort);
  148. <Normal>[Uu][Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt]    RETURN(syUReplyPort);
  149. <Normal>[Ss][Rr][Ee][Pp][Ll][Yy][Pp][Oo][Rr][Tt]    RETURN(sySReplyPort);
  150. <Normal>[Aa][Rr][Rr][Aa][Yy]            RETURN(syArray);
  151. <Normal>[Oo][Ff]                RETURN(syOf);
  152. <Normal>[Ee][Rr][Rr][Oo][Rr]            RETURN(syErrorProc);
  153. <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Pp][Rr][Ee][Ff][Ii][Xx] RETURN(syServerPrefix);
  154. <Normal>[Uu][Ss][Ee][Rr][Pp][Rr][Ee][Ff][Ii][Xx]    RETURN(syUserPrefix);
  155. <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Dd][Ee][Mm][Uu][Xx]    RETURN(syServerDemux);
  156. <Normal>[Rr][Cc][Ss][Ii][Dd]            RETURN(syRCSId);
  157. <Normal>[Ii][Mm][Pp][Oo][Rr][Tt]        RETURN(syImport);
  158. <Normal>[Uu][Ii][Mm][Pp][Oo][Rr][Tt]        RETURN(syUImport);
  159. <Normal>[Ss][Ii][Mm][Pp][Oo][Rr][Tt]        RETURN(sySImport);
  160. <Normal>[Tt][Yy][Pp][Ee]            RETURN(syType);
  161. <Normal>[Kk][Ee][Rr][Nn][Ee][Ll][Ss][Ee][Rr][Vv][Ee][Rr] RETURN(syKernelServer);
  162. <Normal>[Kk][Ee][Rr][Nn][Ee][Ll][Uu][Ss][Ee][Rr]    RETURN(syKernelUser);
  163. <Normal>[Ss][Kk][Ii][Pp]            RETURN(sySkip);
  164. <Normal>[Ss][Tt][Rr][Uu][Cc][Tt]        RETURN(syStruct);
  165. <Normal>[Ii][Nn][Tt][Rr][Aa][Nn]        RETURN(syInTran);
  166. <Normal>[Oo][Uu][Tt][Tt][Rr][Aa][Nn]        RETURN(syOutTran);
  167. <Normal>[Dd][Ee][Ss][Tt][Rr][Uu][Cc][Tt][Oo][Rr]    RETURN(syDestructor);
  168. <Normal>[Cc][Tt][Yy][Pp][Ee]                RETURN(syCType);
  169. <Normal>[Cc][Uu][Ss][Ee][Rr][Tt][Yy][Pp][Ee]        RETURN(syCUserType);
  170. <Normal>[Cc][Ss][Ee][Rr][Vv][Ee][Rr][Tt][Yy][Pp][Ee]    RETURN(syCServerType);
  171. <Normal>[Cc]_[Ss][Tt][Rr][Ii][Nn][Gg]            RETURN(syCString);
  172.  
  173. <Normal>[Ii][Ss][Ll][Oo][Nn][Gg]        FRETURN(flLong);
  174. <Normal>[Ii][Ss][Nn][Oo][Tt][Ll][Oo][Nn][Gg]    FRETURN(flNotLong);
  175. <Normal>[Dd][Ee][Aa][Ll][Ll][Oo][Cc]        FRETURN(flDealloc);
  176. <Normal>[Nn][Oo][Tt][Dd][Ee][Aa][Ll][Ll][Oo][Cc] FRETURN(flNotDealloc);
  177. <Normal>[Ss][Ee][Rr][Vv][Ee][Rr][Cc][Oo][Pp][Yy] FRETURN(flServerCopy);
  178. <Normal>[Cc][Oo][Uu][Nn][Tt][Ii][Nn][Oo][Uu][Tt] FRETURN(flCountInOut);
  179.  
  180. <Normal>[Pp][Oo][Ll][Yy][Mm][Oo][Rr][Pp][Hh][Ii][Cc]    TRETURN(MACH_MSG_TYPE_POLYMORPHIC,32);
  181.  
  182. <Normal>"MACH_MSG_TYPE_UNSTRUCTURED"    TRETURN(MACH_MSG_TYPE_UNSTRUCTURED,0);
  183. <Normal>"MACH_MSG_TYPE_BIT"        TRETURN(MACH_MSG_TYPE_BIT,1);
  184. <Normal>"MACH_MSG_TYPE_BOOLEAN"        TRETURN(MACH_MSG_TYPE_BOOLEAN,32);
  185. <Normal>"MACH_MSG_TYPE_INTEGER_16"    TRETURN(MACH_MSG_TYPE_INTEGER_16,16);
  186. <Normal>"MACH_MSG_TYPE_INTEGER_32"    TRETURN(MACH_MSG_TYPE_INTEGER_32,32);
  187. <Normal>"MACH_MSG_TYPE_CHAR"        TRETURN(MACH_MSG_TYPE_CHAR,8);
  188. <Normal>"MACH_MSG_TYPE_BYTE"        TRETURN(MACH_MSG_TYPE_BYTE,8);
  189. <Normal>"MACH_MSG_TYPE_INTEGER_8"    TRETURN(MACH_MSG_TYPE_INTEGER_8,8);
  190. <Normal>"MACH_MSG_TYPE_REAL"        TRETURN(MACH_MSG_TYPE_REAL,0);
  191. <Normal>"MACH_MSG_TYPE_STRING"        TRETURN(MACH_MSG_TYPE_STRING,0);
  192. <Normal>"MACH_MSG_TYPE_STRING_C"    TRETURN(MACH_MSG_TYPE_STRING_C,0);
  193.  
  194. <Normal>"MACH_MSG_TYPE_MOVE_RECEIVE"    TPRETURN(MACH_MSG_TYPE_MOVE_RECEIVE,MACH_MSG_TYPE_PORT_RECEIVE,32);
  195. <Normal>"MACH_MSG_TYPE_COPY_SEND"    TPRETURN(MACH_MSG_TYPE_COPY_SEND,MACH_MSG_TYPE_PORT_SEND,32);
  196. <Normal>"MACH_MSG_TYPE_MAKE_SEND"    TPRETURN(MACH_MSG_TYPE_MAKE_SEND,MACH_MSG_TYPE_PORT_SEND,32);
  197. <Normal>"MACH_MSG_TYPE_MOVE_SEND"    TPRETURN(MACH_MSG_TYPE_MOVE_SEND,MACH_MSG_TYPE_PORT_SEND,32);
  198. <Normal>"MACH_MSG_TYPE_MAKE_SEND_ONCE"    TPRETURN(MACH_MSG_TYPE_MAKE_SEND_ONCE,MACH_MSG_TYPE_PORT_SEND_ONCE,32);
  199. <Normal>"MACH_MSG_TYPE_MOVE_SEND_ONCE"    TPRETURN(MACH_MSG_TYPE_MOVE_SEND_ONCE,MACH_MSG_TYPE_PORT_SEND_ONCE,32);
  200.  
  201. <Normal>"MACH_MSG_TYPE_PORT_NAME"    TRETURN(MACH_MSG_TYPE_PORT_NAME,32);
  202. <Normal>"MACH_MSG_TYPE_PORT_RECEIVE"    TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_RECEIVE,32);
  203. <Normal>"MACH_MSG_TYPE_PORT_SEND"    TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_SEND,32);
  204. <Normal>"MACH_MSG_TYPE_PORT_SEND_ONCE"    TPRETURN(MACH_MSG_TYPE_POLYMORPHIC,MACH_MSG_TYPE_PORT_SEND_ONCE,32);
  205. <Normal>"MACH_MSG_TYPE_POLYMORPHIC"    TRETURN(MACH_MSG_TYPE_POLYMORPHIC,0);
  206.  
  207. <Normal>":"        RETURN(syColon);
  208. <Normal>";"        RETURN(sySemi);
  209. <Normal>","        RETURN(syComma);
  210. <Normal>"+"        RETURN(syPlus);
  211. <Normal>"-"        RETURN(syMinus);
  212. <Normal>"*"        RETURN(syStar);
  213. <Normal>"/"        RETURN(syDiv);
  214. <Normal>"("        RETURN(syLParen);
  215. <Normal>")"        RETURN(syRParen);
  216. <Normal>"="        RETURN(syEqual);
  217. <Normal>"^"        RETURN(syCaret);
  218. <Normal>"~"        RETURN(syTilde);
  219. <Normal>"<"        RETURN(syLAngle);
  220. <Normal>">"        RETURN(syRAngle);
  221. <Normal>"["        RETURN(syLBrack);
  222. <Normal>"]"        RETURN(syRBrack);
  223. <Normal>"|"        RETURN(syBar);
  224.  
  225. <Normal>{Ident}        { yylval.identifier = strmake(yytext);
  226.               RETURN(syIdentifier); }
  227. <Normal>{Number}    { yylval.number = atoi(yytext); RETURN(syNumber); }
  228.  
  229. <String>{String}    { yylval.string = strmake(yytext);
  230.               BEGIN Normal; RETURN(syString); }
  231. <FileName>{FileName}    { yylval.string = strmake(yytext);
  232.               BEGIN Normal; RETURN(syFileName); }
  233. <QString>{QString}    { yylval.string = strmake(yytext);
  234.               BEGIN Normal; RETURN(syQString); }
  235.  
  236. ^\#[ \t]*{Number}[ \t]*\"[^"]*\"    { doSharp(yytext+1);
  237.                       oldYYBegin = yybgin;
  238.                       BEGIN SkipToEOL; }
  239. ^\#\ *{Number}                { doSharp(yytext+1);
  240.                       oldYYBegin = yybgin;
  241.                       BEGIN SkipToEOL; }
  242. ^\#                    { yyerror("illegal # directive");
  243.                       oldYYBegin = yybgin;
  244.                       BEGIN SkipToEOL; }
  245.  
  246. <SkipToEOL>\n        yybgin = oldYYBegin;
  247. <SkipToEOL>.        ;
  248.  
  249. [ \t\n]            ;
  250. .            { BEGIN Normal; RETURN(syError); }
  251.  
  252. %%
  253.  
  254. extern void
  255. LookNormal()
  256. {
  257.     BEGIN Normal;
  258. }
  259.  
  260. extern void
  261. LookString()
  262. {
  263.     BEGIN String;
  264. }
  265.  
  266. extern void
  267. LookQString()
  268. {
  269.     BEGIN QString;
  270. }
  271.  
  272. extern void
  273. LookFileName()
  274. {
  275.     BEGIN FileName;
  276. }
  277.  
  278. static void
  279. doSharp(body)
  280.     char *body;
  281. {
  282.     register char *startName;
  283.  
  284.     yylineno = atoi(body);
  285.     startName = index(body, '"');
  286.     if (startName != NULL)
  287.     {
  288.     *rindex(body, '"') = '\0';
  289.     strfree(yyinname);
  290.     yyinname = strmake(startName+1);
  291.     }
  292. }
  293.